﻿using System;
using System.Text;
using System.Collections.Generic;
using System.ComponentModel;
using System.ServiceModel;
using Sinacor.Infra.UI.Common;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Acesso.Acesso;
using Sinacor.Infra.UI.Security.Services;

namespace Sinacor.UI.Bovespa.Ordens.Communication
{
    public class Acesso : BaseCommunication
    {
        #region Construtor
        public Acesso(SessionInformation session)
            : base(session)
        {
        }
        #endregion


        #region VerificarAcesso


        public Boolean VerificarAcesso(Model.Parameter.VerificarAcessoFuncaoRequest pVerificarAcessoFuncaoRequest)
        {

            IAcesso servico = null;

            try
            {
                using (ServiceInstance<IAcesso> serviceManager = new ServiceInstance<IAcesso>())
                {
                    servico = serviceManager.TryGetInstance(this.Session);
                    return servico.VerificarAcessoFuncao(new Translator.TranslatorVerificarAcessoFuncaoRequest().Translate(pVerificarAcessoFuncaoRequest));
                }
            }

            catch (Exception ex)
            {
                HandleFault(ex); //20080504 19:45 - RValadao - Alterado por solicitação da Infra
                return false;

            }


        }

        #region Metodo
        /// <summary>
        /// vERIFICA SE O USUÁRIO LOGADO TEM A PERMISSÃO ESPECIFICADA
        /// </summary>
        /// <param name="pVerificarAcessoFuncao"></param>
        /// <returns></returns>
        public bool ValidarAcessoFuncao(Model.Parameter.VeririfcarAcessoFuncao pVerificarAcessoFuncao)
        {
            bool flagAcesso = false;
            try
            {
                using (ServiceInstance<Bovespa.Acesso.Acesso.IAcesso> serviceManager = new ServiceInstance<Bovespa.Acesso.Acesso.IAcesso>())
                {
                    Bovespa.Acesso.Acesso.IAcesso objIAcesso = serviceManager.TryGetInstance(this.Session);
                    flagAcesso = objIAcesso.VerificarAcessoFuncao(new Translator.ValidarAcessoFuncaoToRequest().toDataContract(pVerificarAcessoFuncao));
                }
            }
            catch (Exception ex)
            {
                base.HandleFault(ex);
            }
            return flagAcesso;
        }

        /// <summary>
        /// Verifica se o usuário logado tem permissão de incluir ordem
        /// </summary>
        public void PermissaoIncluirOrdem()
        {
            try
            {
                using (ServiceInstance<Bovespa.Acesso.Acesso.IAcesso> serviceManager = new ServiceInstance<Bovespa.Acesso.Acesso.IAcesso>())
                {
                    Bovespa.Acesso.Acesso.IAcesso objIAcesso = serviceManager.TryGetInstance(this.Session);
                    objIAcesso.PermissaoIncluirOrdem();
                }
            }
            catch (Exception ex)
            {
                base.HandleFault(ex);
            }
        }

        /// <summary>
        /// Verifica se o usuário logado tem permissão de Alterar ordem
        /// </summary>
        public void PermissaoAlterarOrdem()
        {
            try
            {
                using (ServiceInstance<Bovespa.Acesso.Acesso.IAcesso> serviceManager = new ServiceInstance<Bovespa.Acesso.Acesso.IAcesso>())
                {
                    Bovespa.Acesso.Acesso.IAcesso objIAcesso = serviceManager.TryGetInstance(this.Session);
                    objIAcesso.PermissaoAlterarOrdem();
                }
            }
            catch (Exception ex)
            {
                base.HandleFault(ex);
            }
        }

        /// <summary>
        /// Verifica se o usuário logado tem permissão de Cancelar ordem
        /// </summary>
        public void PermissaoCancelarOrdem()
        {
            try
            {
                using (ServiceInstance<Bovespa.Acesso.Acesso.IAcesso> serviceManager = new ServiceInstance<Bovespa.Acesso.Acesso.IAcesso>())
                {
                    Bovespa.Acesso.Acesso.IAcesso objIAcesso = serviceManager.TryGetInstance(this.Session);
                    objIAcesso.PermissaoCancelarOrdem();
                }
            }
            catch (Exception ex)
            {
                base.HandleFault(ex);
            }
        }
        #endregion Metodo

        #endregion



    }
}
